﻿//#define _CRT_SECURE_NO_WARNINGS  1
////一定要动手，例子不管多么简单，建议至少自己手敲一遍看看是否理解了里头的细枝末节。
////一定要学会思考，思考为什么要这样，而不是那样。还要举一反三地思考
//#include<iostream>
//#include<string>
//#include<vector>
//#include<fstream>
//using namespace std;
//int main()
//{
//	//insert
//	//string str("hello world");
//	////str.insert(5, "xxxx");//在下标第五个位置插入"xxxx"
//	////cout << str << endl;
//
//	//str.insert(0, 2, 'x');//在下标0~2之间插入'x'
//	//cout << str << endl;
//	//
//	////erase  擦除
//	//str.erase(0, 2);
//	//cout << str << endl; //擦除下标0~2之间的数据
//	//str.erase(2);		//下标0~2之间数据保留，其他数据擦除
//	//cout << str << endl;
//
//
//	//find
//	//string str1("hello world ni hao ya wo jiao jz");
//	//cout << str << endl;
//	//size_t pos = str.find(' ', 0);		//查找" " 从下标为零的位置开始,如果找不到返回string::npos无符号整型的最大值
//	////str.replace(pos, 1, "20%");		//从下标为1的位置开始，将pos位置数据替换为20%
//	////cout << str << endl;
//	//cout << pos << endl;
//	////目标将字符串中的空格全部替代成为20%
//	//while (pos != string::npos)
//	//{
//	//	str.replace(pos, 1, "20%");		//效率太慢，因为要向后挪动数据
//	//	pos = str.find(' ', pos + 3);
//	//}
//	//cout << str << endl;				//成功
//	//第二种方法
//	//以空间换时间：具体重新开一个数组
//	//string str;
//	//for (auto it : str1)
//	//{
//	//	if (it == ' ')
//	//	{
//	//		str += "20%";
//	//	}
//	//	else
//	//	{
//	//		str += it;
//	//	}
//	//}
//	//cout << str << endl;
//	//str.swap(str1);    //交换两个数组的数据，只是交换指向该数组的指针
//	//cout << str1 << endl;
//	
//
//
//
//	//向文件中写入
//	//1.包含头文件
//	//2.创建流对象
//	//ofstream ofs;
//	////3.打开文件
//	//ofs.open("main.cpp", ios::out); //  注意，写入时会清空原来的数据
//	////4.读文件
//	//ofs << "文件操作";
//	//ofs << "文件操作";
//	//ofs << "文件操作";
//	//ofs << "文件操作";
//	////5.关闭文件
//	//ofs.close();
//
//	////读文件操作
//	////2.创建流对象
//	//fstream ifs;
//	////打开文件
//	//ifs.open("string_three.cpp", ios::in);
//	////读文件
//	//string str;
//	//while (getline(ifs, str))		//getling(流对象，读取文件要放入字符串)
//	//{
//	//	cout << str << endl;
//	//}
//	////关闭文件
//	//ifs.close();
//	
//
//
//	//获取子串
//	//string str("temp.tar.zip");
//	//string str1;
//	//size_t pos = str.find('.', 1);
//	//if (pos != string::npos)
//	//{
//	//	//str1 = str.substr(pos, str.size() - pos);  //substr(初始位置，结束位置)
//	//	str1 = str.substr(pos);						 //substr(初始位置）获取直到该该字符串结束
//	//}
//	//cout << str1 << endl;
//
//	//string str("https://legacy.cplusplus.com/reference/string/string/substr/");
//	////分别取出网址的  协议  域名  路径
//	//string str1, str2, str3;
//	//size_t pos = str.find(':', 1);
//	//if (pos != string::npos)
//	//{
//	//	str1 = str.substr(0, pos);
//	//}
//	//size_t pos2 = str.find('/', pos + 3);		//返回在str中pos+3位置为初始值的位置
//	//if (pos != string::npos)
//	//{
//	//	str2 = str.substr(pos+3,pos2-(pos+3));	//字符串中的位置为基准
//	//}
//	//str3 = str.substr(pos2+1);
//	//cout << str1 << endl;
//	//cout << str2 << endl;
//	//cout << str3 << endl;
//
//
//	//std::string str("Please, replace the vowels in this sentence by asterisks.");
//	//size_t pos = str.find_first_not_of("abc", 0);		//从下标为0的位置开始找，不是“abc”其中之一的返回
//	//size_t pos = str.find_first_of("abc", 0);			//从下标为0的位置开始找,是“abc”其中之一的，即返回下标
//	//while (pos != string::npos)
//	//{
//	//	str[pos] = '*';
//	//	pos = str.find_first_not_of("abc", pos + 1);
//	//}
//	/*cout << str << endl;*/
//	/*std::string str1("/usr/bin/man");
//	std::string str2("c:\\windows\\winhelp.exe");*/
//
//	//两个字符串相加
//	/*string str("hello");
//	string str1("world");
//	string ret = str + str1;
//	cout << ret << endl;
//
//	string ret1 = str + "world";
//	cout << ret1 << endl;
//	string ret2 = "world" + str;
//	cout << ret2 << endl;*/
//
//
//
//
//
//
//	return 0;
//}